package com.ainiyar.springweb.util;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.util.AntPathMatcher;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;

/**************************************
 * File Name : Util
 * Created with : IntelliJ IDEA.
 * Author : 艾尼亚尔·毛拉吾提
 * QQ : 524155792  WeChat : ainiyar0124
 * Created Time : 2024/2/4  13:55
 * Desc :通用工具类
 ***************************************/
public class ToolsUtil {
    /**
     * 判断是否空对象
     *
     * @param object 对象
     * @return true:表示是空
     */
    public static boolean isNull(Object object) {
        return null == object;
    }

    /**
     * 判断字符串是否是空字符串
     *
     * @param string 字符串
     * @return true:表示是空字符串
     */
    public static boolean isNullOrEmpty(String string) {
        return null == string || string.trim().equals("");
    }

    /**
     * 对比两个请求url
     * @param url 需要对比请求url
     * @param urlPath 对比的请求url
     * @return boolean
     */
    public static boolean isMatchUrl(String url, String urlPath) {
        AntPathMatcher matcher = new AntPathMatcher();
        return matcher.match(url, urlPath);
    }

    /**
     * LocalDateTime时间格式化
     * @param dateTime LocalDateTime类型的时间
     * @return string
     */
    public static String LocalDateTimeFormat(LocalDateTime dateTime){
        return   dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
    /**
     * 判断当前请求地址是否在白名单中存在
     *
     * @param currentUrl 当前请求地址
     * @param urls       白名单
     * @return true 存在    false不存在
     */
    public static boolean isUrlMatched(String currentUrl, String[] urls) {
        AntPathMatcher matcher = new AntPathMatcher();
        return Arrays.stream(urls)
                .anyMatch(url -> {
                    if (url.endsWith("/**")) {
                        return matcher.match(url, currentUrl);
                    } else {
                        return currentUrl.equals(url);
                    }
                });
    }

    /**
     * 判断在请求中指定参数是否存在或为空
     *
     * @param request   请求体
     * @param paramName 参数
     * @return true 不存在或空
     */
    public static boolean isParamAbsentOrEmpty(HttpServletRequest request, String paramName) {
        String paramValue = request.getParameter(paramName);
        return paramValue == null || paramValue.trim().isEmpty();
    }
}

